package com.sitech.ibnms.c3p.service;

import com.sitech.ibnms.c3p.domain.CronScheduleJob;
import org.apache.commons.lang3.tuple.Pair;

/**
 * Created by liujhc on 7/23.
 */
public interface C3pScheduleService {

    /**
     * 新增一个调度任务
     *
     * @param taskId
     * @param userId
     * @param cronExpression
     * @return scheduleId
     */
    String scheduleTask(String taskId, String userId, String cronExpression);

    /**
     * 新增一个调度任务
     *
     * @param setting
     * @return scheduleId
     */
    String scheduleTask(CronScheduleJob setting);


    /**
     * 新增一个调度计划，在调度触发后的不同时间启动不同任务（也可以相同）
     * <pre>如:
     * scheduleTasksSecondsDelay("0 0 * * * ?" , "admin", Pair.of(0,"C3P_TASK_A"), Pair.of(60,"C3P_TASK_B"));
     * <p/>
     * 表示，每小时每小时启动调度，启动0秒后(立即)启动任务C3P_TASK_A, 并在60秒后启动任务C3P_TASK_B</pre>
     *
     * @param cronExpression cron风格的调度表达式
     * @param userId         用户id
     * @param tasks          调度间隔时间(秒)和任务id组合的列表(secondsDelay : c3pTaskId)
     * @return 调度id
     */
    String scheduleTasksSecondsDelay(String cronExpression, String userId, Pair<Integer, String>... tasks);

    /**
     * 取消调度任务
     *
     * @param scheduleIds
     * @return
     */
    boolean unscheduleTask(String... scheduleIds);

    /**
     * 检查job是否存在
     *
     * @param scheduleId
     * @return
     */
    boolean checkExists(String scheduleId);
}
